package yunwo.cn.yzstation.utils;

import android.content.Context;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.os.Handler;
import android.view.LayoutInflater;
import android.view.View;



import yunwo.cn.yzstation.base.Yzapp;

/**
 *
 *  常见操作的工具类
 *   - 把GMApplication相关的操作 也由CommonUtil来代理
 *   - 好处在于对于使用者只要知道CommonUtil一个工具类就可以了
 */
public class CommonUtil {
    //GMApplication相关的操作由CommonUtil来代理
    public  static Context getContext(){
        return Yzapp.getInstance();
    }
    //取得Handler
    public static Handler getHandler(){
        return  Yzapp.getHandler();
    }
    //取得主线程
    public static Thread getMainThread(){
        return  Yzapp.getMainThread();
    }
    //取得主线程的id
    public  static  int getMainThreadId(){
        return  Yzapp.getMainThreadId();
    }

    //取得资源
    public static Resources getResources(){
        return  getContext().getResources();
    }
    //取得字符串资源
    public static  String getString(int stringResId){
        return  getResources().getString(stringResId);
    }

    //取字符串数组
    public static  String[] getStringArray(int stringArrayResId){
        return  getResources().getStringArray(stringArrayResId);
    }
    //取图片资源
    public static Drawable getDrawable(int drawableResId){
        return  getResources().getDrawable(drawableResId);
    }
    //取得颜色资源
    public static int getColor(int colorResId){
        return  getResources().getColor(colorResId);
    }

    //把xml布局转化为view对象,返回值 是实例化xml后的根节点视图对象
    public static View inflate(int layoutResId){
        return  View.inflate(getContext(),layoutResId,null);
    }

    //取得LayoutInflate对象
    public static LayoutInflater getInflate(){
        return  LayoutInflater.from(getContext());
    }

    //dp转px  ,参照当前设备的屏幕密度
    public static  int dp2px(int dp){
        //手机屏幕密度 ：120dpi 低清  160dpi ：标清(中清)     240dpi ：高清    320dpi ：超高清
        //当前的density 是 当前手机屏幕密度与标清密度的比例值 ，比如 1， 1,5  2， 3
        float density = getResources().getDisplayMetrics().density;
        return (int) (density*dp+0.5);
    }

    //px转dp
    public  static  int px2dp(int px){
        float density = getResources().getDisplayMetrics().density;
        return (int) (px/density+0.5);
    }

    //判断当前的线程是否为主线程
    public  static  boolean isMainThread(){
        return  getMainThreadId()==android.os.Process.myTid();
    }

    /**
     * 确保当前的语句任务在主线程运行
     *  - 使用场景 ： 操作的UI控件的语句任务
     */
    public  static  void runOnMainThread(Runnable r){
        //假如当前就是主线程，则直接执行，否则通过Handler把任务发送到主线程的语句队列中，
        // 再由主线程的轮询器来取语句，再执行
        if(isMainThread()){
            //直接执行
            r.run();
        }else{
            getHandler().post(r);
        }

    }






}
